package _case

import "fmt"

// 值类型声明
func VarDeclareCase() {
	//通过var关键词声明变量
	var a int
	//通过var关键词声明变量，并赋值（默认推断类型，int可省略）
	var b int = 100
	var b1 = 200
	//通过var关键词声明变量，并赋值
	var f1 float32 = 3.14
	//通过var关键词声明变量，并赋值（默认推断类型，int可省略）
	var f2 = 10.88
	fmt.Printf("a=%d, b=%d,b1=%d, f=%f, f=%f\n", a, b, b1, f1, f2)

	//通过var关键词声明多个变量
	var h, i, j = 1, 2, 3
	fmt.Printf("h=%d, i=%d, j=%d\n", h, i, j)
	//通过var关键词声明多个不同变量类型，并赋值（默认推断类型）
	var h1, i1, j1, k1 = "d", 1, 3.14, true
	fmt.Printf("h1=%s, i1=%d, j1=%f.2, k1=%t\n", h1, i1, j1, k1)

	//通过 := 推断的方式定义变量并赋值，此方式只能用于局部变量的定义
	n := 100
	fmt.Printf("n=%d\n", n)
	//数组
	var arr1 = [5]int{1, 2, 3, 4, 5}
	arr2 := [...]string{"a", "b", "c"}
	var arr3 [5]int
	arr3[0] = 1
	arr3[1] = 2
	arr3[2] = 3
	var arr [3]string
	arr[0] = "a"
	arr[1] = "b"
	arr[2] = "c"
	fmt.Println(arr1, arr2, arr3, arr)
}

// 引用类型默认零值都是 nil
func VarDeclarePointerCase() {
	//指针类型
	var intptr *int
	var strptr *string
	fmt.Println(intptr, strptr)

	//接口类型，可以等于任意类型
	var inter interface{}
	fmt.Println(inter)
	inter = 100
	fmt.Println(inter)
	inter = "Hello World"
	fmt.Println(inter)
	inter = [5]int{1, 2, 3, 4, 5}
	fmt.Println(inter)
	inter = map[string]int{"a": 1, "b": 2, "c": 3}
	fmt.Println(inter)
	inter = make(chan int, 1)
	fmt.Println(inter)
}
